<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 基于原型对象的继承使得不同构造函数的原型对象关联在一起，并且这种关联的关系是一种链状的结构，
    // 我们将原型对象的链状结构关系称为原型链

    // 原型链-查找规则
    // 1.当访问一个对象的属性（包括方法）时，首先查找这个对象自身有没有该属性。
    // 2.如果没有就查找它的原型（也就是 __proto__指向的 prototype 原型对象）
    // 3.如果还没有就查找原型对象的原型（Object的原型对象）
    // 4.依此类推一直找到 Object 为止（null）
    // 5.__proto__对象原型的意义就在于为对象成员查找机制提供一个方向，或者说一条路线
    // 6.可以使用 instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上


    // function Object() { }
    console.log(Object.prototype)
    console.log(Object.prototype.__proto__)  // null
    console.log(Object.prototype.__proto__ === null)  // true

    function Person() { }
    const ldh = new Person()
    // console.log(ldh.__proto__ === Person.prototype)  // true
    console.log(Person.prototype)
    console.log(Person.prototype.__proto__)  // Object.prototype
    console.log(Person.prototype.__proto__ === Object.prototype)  // true
    console.log('-----------')

    console.log(ldh instanceof Person)  // true
    console.log(ldh instanceof Object)  // true
    console.log(ldh instanceof Array)  // false
    console.log([1, 2, 3] instanceof Array)  // true
    console.log(Array instanceof Object)  // true     Object最大  万物皆对象
  </script>
</body>

</html>